#if _DEBUG

#include <cppunit/config/SourcePrefix.h>
#include "VarTableTest.h"

void VarTableTest::setUp()
{
}

void VarTableTest::tearDown()
{
}

CPPUNIT_TEST_SUITE_REGISTRATION( VarTableTest );

void VarTableTest::testPreInsert()
{
	VarTable var_table;

	CPPUNIT_ASSERT(-1 == var_table.GetVarIndex("k"));

	STRING_ARRAY string_array = var_table.GetAllVarNames();
	CPPUNIT_ASSERT(0 == string_array.size());
}

void VarTableTest::testInsert()
{
	VarTable var_table;
	CPPUNIT_ASSERT(-1 != var_table.InsertVar("x"));
	CPPUNIT_ASSERT(-1 != var_table.InsertVar("y"));
	CPPUNIT_ASSERT(-1 != var_table.InsertVar("z"));
	CPPUNIT_ASSERT(-1 != var_table.InsertVar("a"));
	CPPUNIT_ASSERT(-1 != var_table.InsertVar("b"));
	CPPUNIT_ASSERT(-1 != var_table.InsertVar("b"));
	CPPUNIT_ASSERT(-1 != var_table.InsertVar("c"));
	CPPUNIT_ASSERT(-1 == var_table.InsertVar("0c"));
}

void VarTableTest::testGetVarName()
{
	VarTable var_table;
	var_table.InsertVar("x");
	var_table.InsertVar("y");
	var_table.InsertVar("z");
	var_table.InsertVar("a");
	var_table.InsertVar("b");
	var_table.InsertVar("b");
	var_table.InsertVar("c");



	CPPUNIT_ASSERT(var_table.GetVarName(0) == "x");
	CPPUNIT_ASSERT(var_table.GetVarName(3) == "a");
	CPPUNIT_ASSERT(var_table.GetVarName(1) == "y");
	CPPUNIT_ASSERT(var_table.GetVarName(100) == "");
}

void VarTableTest::testGetVarIndex()
{
	VarTable var_table;
	var_table.InsertVar("x");
	var_table.InsertVar("y");
	var_table.InsertVar("z");
	var_table.InsertVar("a");
	var_table.InsertVar("b");
	var_table.InsertVar("b");
	var_table.InsertVar("c");



	CPPUNIT_ASSERT(var_table.GetVarIndex("x") == 0);
	CPPUNIT_ASSERT(var_table.GetVarIndex("c") == 5);
	CPPUNIT_ASSERT(var_table.GetVarIndex("g") == -1);
}

void VarTableTest::testGetAllVarNames()
{
	VarTable var_table;
	var_table.InsertVar("x");
	var_table.InsertVar("y");
	var_table.InsertVar("z");
	var_table.InsertVar("a");
	var_table.InsertVar("b");
	var_table.InsertVar("b");
	var_table.InsertVar("c");



	STRING_ARRAY string_array = var_table.GetAllVarNames();
	CPPUNIT_ASSERT(string_array.size() == 6);

	CPPUNIT_ASSERT(string_array.find("a") != string_array.end());
	CPPUNIT_ASSERT(string_array.find("b") != string_array.end());
	CPPUNIT_ASSERT(string_array.find("c") != string_array.end());
	CPPUNIT_ASSERT(string_array.find("x") != string_array.end());
	CPPUNIT_ASSERT(string_array.find("y") != string_array.end());
	CPPUNIT_ASSERT(string_array.find("z") != string_array.end());
	CPPUNIT_ASSERT(string_array.find("zz") == string_array.end());
}

void VarTableTest::testGetAllVarIndex()
{
	VarTable var_table;
	var_table.InsertVar("x");
	var_table.InsertVar("y");
	var_table.InsertVar("z");
	var_table.InsertVar("a");
	var_table.InsertVar("b");
	var_table.InsertVar("b");
	var_table.InsertVar("c");

	VARINDEX_ARRAY var_array = var_table.GetAllVarIndex();
	CPPUNIT_ASSERT(var_array.size() == 6);

	auto it = var_array.find(0);
	CPPUNIT_ASSERT(var_table.GetVarName(*it) == "x");
	it = var_array.find(1);
	CPPUNIT_ASSERT(var_table.GetVarName(*it) == "y");
	it = var_array.find(2);
	CPPUNIT_ASSERT(var_table.GetVarName(*it) == "z");
	it = var_array.find(3);
	CPPUNIT_ASSERT(var_table.GetVarName(*it) == "a");
	it = var_array.find(4);
	CPPUNIT_ASSERT(var_table.GetVarName(*it) == "b");
	it = var_array.find(5);
	CPPUNIT_ASSERT(var_table.GetVarName(*it) == "c");
}

#endif